package guida.ccf.gzuexaminesystem.controller;

import guida.ccf.gzuexaminesystem.common.ResponseResult;
import guida.ccf.gzuexaminesystem.dto.AuditDto;
import guida.ccf.gzuexaminesystem.dto.AuditListDto;
import guida.ccf.gzuexaminesystem.dto.LoginDto;
import guida.ccf.gzuexaminesystem.service.AdminService;
import io.swagger.annotations.Api;
import io.swagger.annotations.ApiModelProperty;
import io.swagger.annotations.ApiOperation;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.security.access.prepost.PreAuthorize;
import org.springframework.util.StringUtils;
import org.springframework.validation.annotation.Validated;
import org.springframework.web.bind.annotation.*;

/**
 * <p>
 *  前端控制器
 *  在
 * </p>
 *
 * @author ccf
 * @since 2023-11-03
 */
@RestController
@RequestMapping("/admin")
@ApiOperation("管理端相关api接口")
public class AdminController {

    @Autowired
    private AdminService adminService;

    /**
     * 管理员登录接口
     * @param loginDto 登录实体类: username password jwtId
     * @return 返回登录结果
     */
    @PostMapping("/login")
    @ApiOperation(value = "管理员登录接口", notes = "参数是username, password和jwtId")
    public ResponseResult<?> login(@Validated @RequestBody LoginDto loginDto) {
        return adminService.login(loginDto);
    }

    /**
     * 管理员退出登录接口
     * @return 返回退出登录结果
     */
    @PostMapping("/logout")
    @ApiOperation(value = "管理员退出登录接口", notes = "参数无")
    public ResponseResult<?> logout() {
        return adminService.logout();
    }

    /**
     * 测试权限接口
     * @return 测试权限接口
     */
    @PostMapping("/test")
    @ApiOperation("测试权限接口")
    @PreAuthorize("hasAnyRole('ADMIN')")
    public String test() {
        return "具有 ROLE_ADMIN 权限的用户才可以访问该接口!";
    }

    /**
     * 管理员审核资料
     */
    @PutMapping("/audit")
    @ApiOperation("管理员审核资料")
    @PreAuthorize("hasAnyRole('ADMIN')")
    public ResponseResult<?> audit(@Validated @RequestBody AuditDto auditDto) {
        return adminService.audit(auditDto);
    }

    /**
     * 管理员获取为审核列表
     * auditListDto.getStatus() : 1通过,0未通过,-1未审核
     */
    @GetMapping("/list")
    @ApiOperation("管理员获取为未审核的列表")
    @PreAuthorize("hasAnyRole('ADMIN')")
    public ResponseResult<?> getList(@RequestBody AuditListDto auditListDto) {
        if (!StringUtils.hasLength(auditListDto.getStatus())) {
            return ResponseResult.fail("请选择审核状态!");
        }
        return adminService.getList(auditListDto);
    }

    /**
     * 管理员点击查看, 获取相关数据: 文件等.
     */
}
